コードが汚いことは気にしないで!
複素正則函数 $f(z)$ に対して、実二次元平面におけるベクトル場
$$ (x,y)\mapsto (\mathrm{Re}\,f(x+iy),-\mathrm{Im}\,f(x+iy)) $$が対応している。そのベクトル場に沿った流れの図を描きたい。
特に特別な形の有理函数 $Q(z)$ に対する $f(z)=\sqrt{Q(z)}$ の流れの図を描きたい。
モチベーションは exact WKB に親しみやすくなること。
$\sqrt{Q(z)}$ の流れの図から Stokes 曲線を見て取ることができる。
using PyPlot
#PyPlot.svg(true) #slow
ae()=axes()[:set_aspect]("equal")
plotstart() = plt[:figure](figsize=(8,8))
function plotvf(z,w)
r = abs.(w)
plt[:quiver](real(z),imag(z),real(w./r),-imag(w./r), log.(r))
end
plotstream(z,w) = plt[:streamplot](real(z),imag(z),real(w),-imag(w),
color="orange", linewidth=0.5, arrowsize=0.01, density=(3,3))
ploto(x,y,c)=plot(x,y,"o",color=c,mew=2)
plotx(x,y,c)=plot(x,y,"x",color=c,mew=2)
x = [-2:0.2:2;]'
y = x'
z = x .+ y.*im
δ=0.5
for t in -δ:δ:δ
plotstart()
title("\$t = $t\$")
w = exp(im*t)*sqrt.(1-z.^2)
plotvf(z,w)
plotstream(z,w)
#grid("on")
plotx(1,0,"black")
plotx(-1,0,"black")
plot([-1,-2],[0,0],color="blue")
plot([1,2],[0,0],color="blue")
ae()
end
x = [-0.5:0.1:2.5;]'
y = [-1.5:0.1:1.5;]
z = x .+ y.*im
δ=0.3
θ0=π/2
#θ0=0
#θ=π
for t in -δ:δ:δ
plotstart()
θ=θ0+t
title("\$t = $t\$")
w = z-1
w = (1+w)./w.^2
w = exp(im*θ)*sqrt.(w)
plotvf(z,w)
plotstream(z,w)
#grid("on")
ploto(1,0,"blue")
plotx(0,0,"black")
#plot([1,1.5],[0,0],color="blue")
ae()
end
x = [-2.0:0.1:3.0;]'
y = [-2.0:0.1:2.0;]
z = x .+ y.*im
δ=0.4
#θ0=π/2
θ0=0
#θ=π
for t in -δ:δ:δ
plotstart()
θ=θ0+t
title("\$t = $t\$")
w = z
w = (w-1).*(w-2)./w.^3
w = exp(im*θ)*sqrt.(w)
plotvf(z,w)
plotstream(z,w)
#grid("on")
ploto(0,0,"blue")
plotx(1,0,"black")
#plotx(2,0,"black")
#plot([1,1.5],[0,0],color="blue")
ae()
end
using PyPlot
x=[-1.5:0.05:1.0;]'
y=[-1.0:0.05:1.0;]
z = x .+ im*y
#display(1)
#w0=2*sqrt.(z.+1)+log.((1.-sqrt.(z.+1))./(1.+sqrt.(z.+1)))
v0=sqrt.((z.+1)./z.^2)
#display(2)
for t in -pi/2:pi/20:pi/2
#display(t)
c=exp(im*(pi/2+t))
#w=c*w0
v=c*v0
#r=abs.(v)
plt[:figure](figsize=(12,12))
plt[:xlim](-1.4,0.9)
plt[:ylim](-0.9,0.9)
title("\$t = $t\$")
#plt[:contour](real(z),imag(z),abs(imag.(w)),levels=[0:0.01:0.2;])
#plt[:quiver](real(z),imag(z),real(v./r),-imag(v./r),log.(r))
plt[:streamplot](real(z),imag(z),real(v),-imag(v),
density=(4,4), color="red", linewidth=0.5, arrowsize=0.5)
plot(0,0,"o",color="black")
plot(-1,0,"x",color="blue")
axes()[:set_aspect]("equal")
end